func permuteUnique(nums []int) [][]int {
	//必须先排序，为了后续去重
	sort.Ints(nums)
	var ans [][]int
	var dfs func([]int, int)
	//判断是否已被选
	used := make([]bool, len(nums))

	dfs = func(set []int, index int) {
		if index == len(nums) {
			ans = append(ans, append([]int{}, set...))
		}
		for i := range nums {
			//排完序后，每次选的数一定是这个数所在重复数集合中从左往右第一个未被选过的数字
			if used[i] || (i > 0 && !used[i-1] && nums[i] == nums[i-1]) {
				continue
			}
			used[i] = true
			set = append(set, nums[i])
			dfs(set, index+1)
			set = set[:len(set)-1]
			used[i] = false
		}
	}
	dfs([]int{}, 0)
	return ans
}
